GdkWindow *prev_focus = gdk_wayland_device_get_focus (device);
GdkWaylandPointerData *pointer = GDK_WAYLAND_DEVICE (device)->pointer;
+ if (gdk_window_get_window_type (window) == GDK_WINDOW_TEMP &&
+ gdk_window_is_visible (window))
+ {
+ g_warning ("Window %p is already mapped at the time of grabbing. "
+ "gdk_seat_grab() should be used to simultanously grab input "
+ "and show this popup. You may find oddities ahead.",
+ window);
+ }
+
if (prev_focus != window)
device_emit_grab_crossing (device, prev_focus, window, GDK_CROSSING_GRAB, time_);
zxdg_positioner_v6_destroy (positioner);
- gdk_seat = gdk_display_get_default_seat (GDK_DISPLAY (display));
- serial = _gdk_wayland_seat_get_last_implicit_grab_serial (gdk_seat, NULL);
- zxdg_popup_v6_grab (impl->display_server.xdg_popup, seat, serial);
+ if (seat)
+ {
+ gdk_seat = gdk_display_get_default_seat (GDK_DISPLAY (display));
+ serial = _gdk_wayland_seat_get_last_implicit_grab_serial (gdk_seat, NULL);
+ zxdg_popup_v6_grab (impl->display_server.xdg_popup, seat, serial);
+ }
wl_surface_commit (impl->display_server.wl_surface);
return NULL;
}
-static struct wl_seat *
-find_default_input_seat (GdkWindow *window)
-{
- GdkDisplay *display;
- GdkSeat *seat;
-
- display = gdk_window_get_display (window);
- seat = gdk_display_get_default_seat (display);
-
- return gdk_wayland_seat_get_wl_seat (seat);
-}
-
static gboolean
should_be_mapped (GdkWindow *window)
{
else
{
grab_input_seat = find_grab_input_seat (window, transient_for);
-
- if (!grab_input_seat)
- {
- g_warning ("No grabbed seat found, using the default one in "
- "order to map popup window %p. You may find oddities "
- "ahead, gdk_seat_grab() should be used to "
- "simultaneously grab input and show this popup",
- window);
- grab_input_seat = find_default_input_seat (window);
- }
}
if (!create_fallback)